package com.gd.iot.energy.service.statistics;

import com.gd.iot.energy.consts.SystemConsts;
import com.gd.iot.energy.pojo.common.vo.PageVO;
import com.gd.iot.energy.pojo.common.vo.ChartVO;
import com.gd.iot.energy.pojo.statistics.dto.UserDosageChartDTO;
import com.gd.iot.energy.pojo.statistics.vo.*;

import java.util.List;

public interface StatisticsService {

    /**
     *
     * @param customerSerialnumber
     * @param customerName
     * @param customerType
     * @param cycle
     * @param date
     * @param areaId
     * @param pageSize
     * @param pageNum
     * @param orderColumn
     * @param orderType
     * @return
     */
    PageVO<StatisticsPageVO> getYearOnYearStatisticsPageVO(String customerSerialnumber, String customerName,
                                                           String customerType, String cycle, String date,
                                                           Integer areaId, Integer pageSize, Integer pageNum,
                                                           String orderColumn, String orderType,
                                                           SystemConsts.StatisticsType statisticsType);

    /**
     * 查看图表（总量对比）
     * @param customerSerialnumber
     * @param customerName
     * @param customerType
     * @param cycle
     * @param date
     * @param areaId
     * @return
     */
    List<ChartVO> getStatisticsChartVO(String customerSerialnumber, String customerName, String customerType,
                                       String cycle, String date, Integer areaId,
                                       SystemConsts.StatisticsType statisticsType);

    /**
     * 趋势分析
     * @param beginDate
     * @param endDate
     * @param areaId
     * @return
     */
    List<ChartVO> getTrendStatisticsChartVO(String beginDate, String endDate, Integer areaId);

    /**
     * 用户用量统计
     * @param customerSerialnumber
     * @param customerName
     * @param archivesAddress
     * @param cycle
     * @param date
     * @param areaId
     * @param pageSize
     * @param pageNum
     * @return
     */
    PageVO<UserDosagePageVO> getUserDosagePageVO(String customerSerialnumber, String customerName,
                                                 String archivesAddress, String cycle,
                                                 String date, Integer areaId, Integer pageSize,
                                                 Integer pageNum);

    /**
     * 用户用量图表
     * @param customerSerialnumber
     * @param customerName
     * @param archivesAddress
     * @param cycle
     * @param date
     * @param areaId
     * @return
     */
    List<UserDosageChartVO> getUserDosageChartVO(String customerSerialnumber, String customerName, String archivesAddress, String cycle, String date, Integer areaId);


    /**
     * 零用量分析分页列表
     * @param customerSerialnumber
     * @param customerName
     * @param archivesAddress
     * @param cycle
     * @param date
     * @param areaId
     * @param pageSize
     * @param pageNum
     * @return
     */
    PageVO<ZeroDosagePageVO> getZeroDosagePageVO(String customerSerialnumber, String customerName, String archivesAddress, String cycle, String date, Integer areaId, Integer pageSize, Integer pageNum);

    /**
     * 突增突减分页列表
     * @param differenceType
     * @param differenceValue
     * @param cycle
     * @param startDate
     * @param endDate
     * @param areaId
     * @param pageSize
     * @param pageNum
     * @return
     */
    PageVO<JumpAndAnticlimaxPageVO> getJumpAndAnticlimaxPageVO(String differenceType,
                                                               String differenceValue,
                                                               String cycle, String startDate,
                                                               String endDate, Integer areaId,
                                                               Integer pageSize, Integer pageNum);

    /**
     * 突增突减图表
     * @param differenceType
     * @param differenceValue
     * @param cycle
     * @param startDate
     * @param endDate
     * @param areaId
     * @return
     */
    List<JumpAndAnticlimaxChartVO> getJumpAndAnticlimaxChartVO(String differenceType, String differenceValue, String cycle, String startDate, String endDate, Integer areaId);
}
